<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
*/

/**
 * Description of PaperDAO
 *
 * @author cshepherd
 */
class PaperDAO extends DAO {
    public function select($fields='*', $condition='TRUE', $page='1', $rows_per_page='20', $order_by='titulo', $order_by_type='DESC') {
        $list_paper = array();
        $data_paper = array();
        try {
            $rows = 0;
            $start = intval(($page-1)*$rows_per_page);
            /*echo $page."<br/>";
            echo $rows_per_page."<br/>";
            echo $start;*/
            $query = "SELECT COUNT(id_paper) AS rows FROM paper";
            $query .= " WHERE ".$condition;
            $stmt = $this->dbh->query($query);
            $rows = $stmt->fetchObject()->rows;
            $query = 'SELECT '. $fields .' FROM paper';
            $query .= ' WHERE '.$condition.' ';            
            $pages = ceil($rows/$rows_per_page);
            $query .= 'ORDER BY '.$order_by;
            $query .= ' '.$order_by_type;
            $stmt->closeCursor();
            $query .= ' LIMIT '.$start.",".$rows_per_page;
            //echo $query;
            /*$query .= 'ORDER BY :order_by';
            $query .= ' :order_by_type ';
            $query .= 'LIMIT :start, :rows_per_page';
            $stmt->closeCursor();
            echo $query;
            echo "<br/>start:" .$start;
            echo "<br/>rows_per_page: ". $rows_per_page;
            echo "<br/>order_by: ".$order_by;
            echo "<br/>order_by_type: ".$order_by_type;*/
            //echo "<br/>".$query;
            //echo $query;
            $stmt = $this->dbh->prepare($query);
            /*$stmt->bindParam(':start', $start, PDO::PARAM_INT);
            $stmt->bindParam(':rows_per_page', $rows_per_page, PDO::PARAM_INT);
            $stmt->bindParam(':order_by', $order_by);
            $stmt->bindParam(':order_by_type', $order_by_type);*/
            $stmt->setFetchMode(PDO::FETCH_OBJ);
            $stmt->execute();
            $result = $stmt->fetchAll();
            foreach($result as $row) {
                $objPaperTO = new PaperTO();
                $objPaperTO->setIdPaper($row->id_paper);
                $objPaperTO->setTitulo($row->titulo);
                $objPaperTO->setFechaEstado($row->fecha_estado);
                $objPaperTO->setUrlPaper($row->url_paper);
                $objPaperTO->setEstado($row->estado);
                //$objPaperTO->setEvaluacion($row->evaluacion);
                $objPaperTO->setResultado($row->resultado);
                //$objPaperTO->setCalificacion($row->calificacion);
                $objPaperTO->setIdIdioma($row->id_idioma);
                $objPaperTO->setIdTrack($row->id_track);
                $list_paper[count($list_paper)+1] = $objPaperTO;
            }
            $data_paper['list_paper']=$list_paper;
            $data_paper['pages']=$pages;
            $data_paper['rows']=$rows;

            return $data_paper;

        }catch(Exception $e) {
            throw $e;
        }
    }

    protected function insert($Entidad) {
        try {
            $titulo = $Entidad->getTitulo();
            $fecha_estado = $Entidad->getFechaEstado();
            $url_paper = $Entidad->getUrlPaper();
            $estado = "Nuevo";
            $resultado = '';
            $id_idioma = $Entidad->getIdIdioma();
            $id_track = $Entidad->getIdTrack();
            $query = 'INSERT INTO paper (titulo, fecha_estado, url_paper, estado, resultado, id_idioma,id_track) ';
            $query .= 'VALUES(:titulo, :fecha_estado, :url_paper, :estado, :resultado, :id_idioma, :id_track)';
            $stmt = $this->dbh->prepare($query);
            $stmt->bindParam(':titulo', $titulo);
            $stmt->bindParam(':fecha_estado', $fecha_estado);
            $stmt->bindParam(':url_paper', $url_paper);
            $stmt->bindParam(':estado', $estado);
            $stmt->bindParam(':resultado', $resultado);
            $stmt->bindParam(':id_idioma', $id_idioma);
            $stmt->bindParam(':id_track', $id_track);
            $stmt->setFetchMode(PDO::FETCH_OBJ);
            if($stmt->execute()) {
                return $this->dbh->lastInsertId();
            }
            else {
                return FALSE;
            }
        }
        catch(Exception $e) {
            throw $e;
        }
    }

    public function load($objPaperTO) {
        try {
            $query = 'SELECT * FROM paper WHERE titulo = :titulo LIMIT 1';
            $stmt = $this->dbh->prepare($query);
            $stmt->bindParam(':titulo', $objPaperTO->getTitulo());
            $stmt->setFetchMode(PDO::FETCH_OBJ);
            $stmt->execute();
            $resultado = $stmt->fetch();
            $objPaperTO->setIdPaper($resultado->id_paper);
            return $objPaperTO;
        }
        catch(Exception $e) {
            throw $e;
        }
    }

    public function loadId($objPaperTO) {
        try {            
            $query = 'SELECT * FROM paper WHERE id_paper = :id_paper LIMIT 1';
            $stmt = $this->dbh->prepare($query);
            $stmt->bindParam(':id_paper', $objPaperTO->getIdPaper());
            $stmt->setFetchMode(PDO::FETCH_OBJ);
            $stmt->execute();
            $resultado = $stmt->fetch();
            $objPaperTO->setIdPaper($resultado->id_paper);
            $objPaperTO->setTitulo($resultado->titulo);
            $objPaperTO->setFechaEstado($resultado->fecha_estado);
            $objPaperTO->setUrlPaper($resultado->url_paper);
            $objPaperTO->setEstado($resultado->estado);
            //$objPaperTO->setEvaluacion($resultado->evaluacion);
            $objPaperTO->setResultado($resultado->resultado);
            //$objPaperTO->setCalificacion($resultado->calificacion);
            $objPaperTO->setIdIdioma($resultado->id_idioma);
            $objPaperTO->setIdTrack($resultado->id_track);            
            return $objPaperTO;
        }
        catch(Exception $e) {
            throw $e;
        }
    }

    public function delete($id) {
        return "";
    }

    protected function update($Entidad) {
        try {
            $id_paper = $Entidad->getIdPaper();            
            $resultado = $Entidad->getResultado();
            $estado = "Revisado";
            $query = 'UPDATE paper ';
            $query .= 'SET resultado = :resultado, estado = :estado';
            $query .= ' WHERE id_paper = :id_paper LIMIT 1';
            $stmt = $this->dbh->prepare($query);
            $stmt->bindParam(':id_paper', $id_paper, PDO::PARAM_INT);
            /*$stmt->bindParam(':fecha_estado', $fecha_estado);
            $stmt->bindParam(':estado', utf8_decode($estado));
            $stmt->bindParam(':evaluacion', $evaluacion);*/
            $stmt->bindParam(':resultado', $resultado);
            $stmt->bindParam(':estado', $estado);
            //$stmt->bindParam(':calificacion', $calificacion);
            $stmt->setFetchMode(PDO::FETCH_OBJ);
            return $stmt->execute();
        }
        catch(Exception $e) {
            throw $e;
        }
    }

}
?>
